package org.god.mybatis.core;

import java.util.Map;

/**
 * SqlSesionFactory对象
 *      一个数据库一个SqlSessionFactory对象
 *      通过SqlSesionFactory对象可以获取SqlSesion对象（开启会话）
 *      一个SqlSesionFactory可以开启多个SqlSesion会话
 */
public class SqlSesionFactory {
    /**
     * 事务管理器属性
     * 事务管理器是可以灵活切换的
     * SqlSessionFactory类中的事务管理器应该是面向接口编程的
     * SqlSessionFactory类中应该有一个事务管理器接口
     */
    private Transaction transaction;

    /**
     * 数据源属性
     */

    /**
     * 存放sql语句的map集合
     * key是sqlId
     * value是对应的sql标签信息对象
     */
    private Map<String,MappedStatement> mapStatements;

    public SqlSesionFactory() {
    }

    public SqlSesionFactory(Transaction transaction, Map<String, MappedStatement> mapStatements) {
        this.transaction = transaction;
        this.mapStatements = mapStatements;
    }

    public Transaction getTransaction() {
        return transaction;
    }

    public void setTransaction(Transaction transaction) {
        this.transaction = transaction;
    }

    public Map<String, MappedStatement> getMapStatements() {
        return mapStatements;
    }

    public void setMapStatements(Map<String, MappedStatement> mapStatements) {
        this.mapStatements = mapStatements;
    }

    /**
     * 获取Sql会话对象
     * @return
     */
    public SqlSession openSession(){
        // 开启会话的前提是开启连接
        transaction.openConnection();
        // 创建SqlSession对象
        SqlSession sqlSession = new SqlSession(this);
        return sqlSession;
    }
}
